package co.gov.medellin.ssti.sub.model.dao;

import java.util.Collection;

import co.gov.medellin.ssti.sub.model.dao.exception.DAOException;
import co.gov.medellin.ssti.sub.model.vo.ValorFlexibleVO;
import co.gov.medellin.ssti.sub.model.vo.VflexVO;

/**
 * Interface que define el contrato de VflexDAO.
 * 
 * @author Consultsoft4
 * 
 */
public interface IVflexDAO extends BaseDAO {
	/**
	 * Metodo que consulta un valor flexible por nombre de tipo de valor
	 * flexible.
	 * 
	 * @param nombreTipoVflex
	 *            Nombre del tipo de valor flexible.
	 * @return Collection<VflexVO>.
	 * @throws DAOException
	 */
	Collection<VflexVO> findVflex(String nombreTipoVflex) throws DAOException;

	/**
	 * Metodo que consulta un valor flexible por nombre de tipo de valor
	 * flexible y codigo del valor flexible padre.
	 * 
	 * @param nombreTipoVflex
	 *            Nombre del tipo de valor flexible.
	 * @param codePadre
	 *            Codigo del padre del valor flexible.
	 * @return Collection de VflexVO
	 * @throws DAOException
	 */
	Collection<VflexVO> findVflex(String nombreTipoVflex, String codePadre)
			throws DAOException;

	/**
	 * Metodo que consulta los valores flexibles cuya descripcion es igual a
	 * strNombre.
	 * 
	 * @param strNombre
	 *            Descripcion
	 * @return
	 * @throws DAOException
	 */
	Collection<VflexVO> findCodeValorFlex(String strNombre) throws DAOException;

	/**
	 * Metodo que consulta el codigo del valor flexible padre, dado el codigo
	 * del valor flexible hijo.
	 * 
	 * @param codeHijo
	 *            Codigo del valor flexible hijo.
	 * @return Codigo del valor flexible padre.
	 * @throws DAOException
	 */
	Long findCodePadreByCodeHijo(Long codeHijo) throws DAOException;

	/**
	 * Metodo que consulta si existe un valor flexible con descripcion =
	 * strNombre y codigo_valor = strCodigo.
	 * 
	 * @param strNombre
	 *            Descripcion del valor flexible.
	 * @param strCodigo
	 *            codigo_valor del valor flexible.
	 * @return true si existe, false en caso contrario.
	 * @throws DAOException
	 */
	boolean exists(String strNombre, String strCodigo) throws DAOException;

	/**
	 * 
	 * 
	 * @param tipovfl
	 * @param option
	 * @return
	 * @throws DAOException
	 */
	Collection<ValorFlexibleVO> findDominio(String tipovfl, String option)
			throws DAOException;

	/**
	 * Metodo que actualiza la vigencia del valor flexible con codigo =
	 * strCodVFL a 'S'.
	 * 
	 * @param strCodVFL
	 * @return
	 * @throws DAOException
	 */
	int actValorFlex(String strCodVFL) throws DAOException;
}
